perm filename DDCALL.SAI[DD,BGB] blob
sn#001295 filedate 1972-03-04 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00017 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00003 00002 ENTRY ERASTV,ERASDD,DPYDD,
00006 00003 α ERASE THE VIDEO SYNTHESIZER'S TV SCREEN
00008 00004 α THE LOGICAL TO PHYSICAL MAPPING IS DERIVED FROM:
00010 00005 α CONVERT SOURCE AND OBJECT XY WINDOWS INTO CLIPED RC WINDOWS
00013 00006 α THE DATA DISC CLIPPER
00015 00007 α SIDE CROSSINGS
00017 00008 α DOUBLE CROSSER
00018 00009 INTERNAL PROCEDURE AI (SHORT REAL X,Y)
00020 00010 α ARC displays an arc of radius R centered about the most recent AI(X,Y)
00022 00011 α RADIAL displays the line segment which radiates from the pseudo
00024 00012 α CHANNEL MAP
00026 00013 α DISPLAY A STRING ON CHANNEL 36 AT CURRENT BEAM POSITION
00027 00014 PROCEDURE DDLOAD
00028 00015 α MAIL ARGUMENTS
00029 00016 INTERNAL PROCEDURE DPYDD(STRING FileINTEGER ARRAY Swindo,Owindo,Levels)
00030 00017 INTERNAL PROCEDURE SHOWDD (INTEGER XXX)
00031 ENDMK
⊗;
ENTRY ERASTV,ERASDD,DPYDD,
SETWND,SETLWN,SETDWN,
AI,AV,DOT,ARC,RADIAL,DMS,
DDSTRC,DDSTR,
SHOWDD,DRUMDD,TVSEG;
BEGIN "DDCALL"
REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE;
REQUIRE "SAITRG[SYS,BGB]" SOURCE_FILE;
INTEGER ARRAY JOBBUF[1:1000];
INTEGER ARCPTR;
α THE LETTER; SAFE SHORT INTEGER ARRAY LETTER[0:31];
DEFINE
MYJOB = "LETTER[0]",
FILENAME="LETTER[1]",EXTENSION="LETTER[2]",PPNAME="LETTER[3]",
LEVWRD = "LETTER[4]",
JADDR = "LETTER[5]",
LEVCHN = "LETTER[6]",
SX="LETTER[7]",SY="LETTER[8]",SDX="LETTER[9]",SDY="LETTER[10]",
OX="LETTER[11]",OY="LETTER[12]",MAGPOW="LETTER[13]",
FRAME# = "LETTER[14]",
SEGNAME = "LETTER[15]",
ILX="LETTER[16]",ILY="LETTER[17]",ILDX="LETTER[18]",ILDY="LETTER[19]",
DR="LETTER[20]",DC="LETTER[21]",DM="LETTER[22]",DN="LETTER[23]",
VCNT = "LETTER[24]",
ACNT = "LETTER[25]",
COMMAND = "LETTER[31]";
α COMMAND 1 DPYDD;
α COMMAND 2 SHOWDD;
α COMMAND 3 DRUMDD;
α COMMAND 4 TVSEG;
α PHYSICAL WINDOW FRAMES;
DEFINE TVM="216", TVN="288";
DEFINE DDR="0", DDC="0";
DEFINE DDM="480", DDN="512";
DEFINE DDR2="479",DDC2="511";
α RC SOURCE WINDOW;
SHORT INTEGER SR,SC,SM,SN;
α DESTINATION WINDOW;
SHORT INTEGER DR2,DC2;
INTEGER MAGNIF;
α LOGICAL WINDOW;
REAL LX,LY,LDX,LDY;
FORWARD INTERNAL PROCEDURE SHOWDD (INTEGER X);
α ERASE THE VIDEO SYNTHESIZER'S TV SCREEN;
PRELOAD_WITH
'136004361324, '136004361324, 0,
'136004351324, '136004351324, 0,
'136004341324, '136004341324, 0,
'136004331324, '136004331324, 0,
'136004321324, '136004321324, 0,
'136004371324, '136004371324, 0;
INTEGER ARRAY EDDBUF[1:18];
INTERNAL PROCEDURE ERASTV;
QUICK_CODE "ERASTV"
INTEGER T1,T2;
LABEL L;
MOVE 11,EDDBUF;
MOVEM 11,T1;
MOVEI 11,3;
MOVEM 11,T2;
MOVEI 12,6;
L: '715000000000 3,T1;
ADDM 11,T1;
SOJG 12,L;
END "ERASTV";
α ERASE THE DATA DISC'S SCREEN;
INTERNAL PROCEDURE ERASDD ;
BEGIN "ERASDD"
INTEGER T1,T2,U1,U2,U3;
U1←U2←'136004001324;
U3←0;
START_CODE
MOVEI 11,U1;
MOVEM 11,T1;
MOVEI 11,3;
MOVEM 11,T2;
'715000000000 3,T1;
END;
END "ERASDD";
α THE LOGICAL TO PHYSICAL MAPPING IS DERIVED FROM:
column ← DC + DN/2 + (X-SX)*KX
row ← DR + DM/2 - (Y-SY)*KY;
SHORT REAL BEAMX,BEAMY,KX,KY,KROW,KCOL;
INTERNAL PROCEDURE SETWND (SHORT REAL ARRAY LWN; SHORT INTEGER ARRAY DWN);
BEGIN "SETWND"
α DESTINATION WINDOW;
DR ← DWN[1];
DC ← DWN[2];
DM ← DWN[3];
DN ← DWN[4];
DR2 ← DR + DM - 1;
DC2 ← DC + DN - 1;
α SOURCE WINDOW;
LX ← LWN[1];
LY ← LWN[2];
LDX ← LWN[3];
LDY ← LWN[4];
α COMPUTE SOURCE TO DESTINATION MAPPING CONSTANTS;
KX ← (DN-1)/(2*LDX);
KY ← (DM-1)/(2*LDY);
KCOL ← DC - KX*(LX-LDX);
KROW ← DR + KY*(LY+LDY);
END "SETWND";
INTERNAL PROCEDURE SETLWN (SHORT REAL A,B,C,D);
BEGIN "SETLWN"
α SOURCE WINDOW;
LX ← A; LY ← B; LDX ← C; LDY ← D;
α COMPUTE SOURCE TO DESTINATION MAPPING CONSTANTS;
KX ← (DN-1)/(2*LDX);
KY ← (DM-1)/(2*LDY);
KCOL ← DC - KX*(LX-LDX);
KROW ← DR + KY*(LY+LDY);
END "SETLWN";
INTERNAL PROCEDURE SETDWN (INTEGER A,B,C,D);
BEGIN "SETDWN"
α DESTINATION WINDOW;
DR ← A; DC ← B; DM ← C; DN ← D;
DR2 ← DR + DM - 1;
DC2 ← DC + DN - 1;
α COMPUTE SOURCE TO DESTINATION MAPPING CONSTANTS;
KX ← (DN-1)/(2*LDX);
KY ← (DM-1)/(2*LDY);
KCOL ← DC - KX*(LX-LDX);
KROW ← DR + KY*(LY+LDY);
END "SETDWN";
α CONVERT SOURCE AND OBJECT XY WINDOWS INTO CLIPED RC WINDOWS;
INTERNAL PROCEDURE WNCLIP ;
BEGIN "WNCLIP"
INTEGER RL,RH,CL,CH;
INTEGER SXL,SXH,SYL,SYH;
α MAGNIFICATION FROM MAG POWER;
MAGNIF ← (1 LSH MAGPOW);
α CONVERT OBJECT XY TO RC DESTINATION CENTRAL;
DR ← (DDM%2-1) - OY;
DC ← OX + DDN%2;
α CLIP THE SOURCE WINDOW TO FIT THE DESTINATION FRAME;
SXL←SX -(IF (DC-SDX*MAGNIF)<DDC THEN (DC-DDC )%MAGNIF ELSE SDX);
SXH←SX +(IF (DC+SDX*MAGNIF)>DDC2 THEN (DDC2-DC)%MAGNIF ELSE SDX-1);
SYH←SY +(IF (DR-SDY*MAGNIF)<DDR THEN (DR-DDR )%MAGNIF ELSE SDY-1);
SYL←SY -(IF (DR+SDY*MAGNIF)>DDR2 THEN (DDR2-DR)%MAGNIF ELSE SDY);
α CONVERT THE SOURCE WINDOW FROM XY TO RC;
RL ← (TVM%2-1) - SYH;
RH ← (TVM%2-1) - SYL;
CL ← SXL + TVN%2;
CH ← SXH + TVN%2;
α CLIP THE RC SOURCE WINDOW TO FIT THE SOURCE FRAME;
RL ← RL MAX 0;
CL ← CL MAX 0;
RH ← RH MIN (TVM-1);
CH ← CH MIN (TVN-1);
α INIT THE RC SOURCE WINDOW;
SR ← RL;
SC ← CL;
SM ← RH - RL +1;
SN ← CH - CL +1;
α RE-INIT THE XY SOURCE WINDOW WHICH IS ALSO THE LOGICAL WINDOW;
SDX ← SN/2;
SDY ← SM/2;
α PHYSICAL DESTINATION WINDOW;
DC ← DDC MAX (DC-SDX*MAGNIF);
DR ← DDR MAX (DR-SDY*MAGNIF);
DR2 ← DDR2 MIN (DR + 2*SDY*MAGNIF-1);
DC2 ← DDC2 MIN (DC + 2*SDX*MAGNIF-1);
DM ← DR2 - DR + 1;
DN ← DC2 - DC + 1;
SETLWN(SX,SY,SDX,SDY);
END "WNCLIP";
α THE DATA DISC CLIPPER;
INTEGER C1,R1,C2,R2; α THE LINE SEGMENT;
BOOLEAN PROCEDURE CLIP;
BEGIN "DDCLIP"
INTEGER QNE,QNW,QSW,QSE;
REAL A,B,C,ADC,ADC2,BDR,BDR2;
INTEGER IN1,IN2;
LABEL NOSHOW;
α EASY INSIDERS;
IN1 ← DC≤C1 ∧ C1≤DC2 ∧ DR≤R1 ∧ R1≤DR2;
IN2 ← DC≤C2 ∧ C2≤DC2 ∧ DR≤R2 ∧ R2≤DR2;
IF IN1 ∧ IN2 THEN RETURN(TRUE);
α LINE COEFFICIENTS, INTERIOR TO THE LEFT IS POSITIVE;
A ← R1 - R2;
B ← C2 - C1;
C ← C1*R2 - C2*R1;
α PARTIAL PRODUCTS;
ADC ← A*DC;
ADC2 ← A*DC2;
BDR ← B*DR;
BDR2 ← B*DR2;
α CORNER Q'S;
QNE ← ADC2 + BDR2 + C;
QNW ← ADC + BDR2 + C;
QSW ← ADC + BDR + C;
QSE ← ADC2 + BDR + C;
α EASY OUTSIDERS;
IF C1>DC2 ∧ C2>DC2 ∨
C1<DC ∧ C2<DC ∨
R1<DR ∧ R2<DR ∨
R1>DR2 ∧ R2>DR2 THEN GO NOSHOW;
α SIDE CROSSINGS;
DEFINE N? = "QNE⊗QNW<0";
DEFINE S? = "QSE⊗QSW<0";
DEFINE E? = "QNE⊗QSE<0";
DEFINE W? = "QNW⊗QSW<0";
DEFINE EAST1 = "BEGIN C1 ← DC2; R1 ← -(ADC2 + C)/B END";
DEFINE WEST1 = "BEGIN C1 ← DC; R1 ← -(ADC + C)/B END";
DEFINE NORTH1 = "BEGIN C1 ← -(BDR2 + C)/A; R1 ← DR2 END";
DEFINE SOUTH1 = "BEGIN C1 ← -(BDR + C)/A; R1 ← DR END";
DEFINE EAST2 = "BEGIN C2 ← DC2; R2 ← -(ADC2 + C)/B END";
DEFINE WEST2 = "BEGIN C2 ← DC; R2 ← -(ADC + C)/B END";
DEFINE NORTH2 = "BEGIN C2 ← -(BDR2 + C)/A; R2 ← DR2 END";
DEFINE SOUTH2 = "BEGIN C2 ← -(BDR + C)/A; R2 ← DR END";
α SINGLE CROSSER END1 WITHIN;
IF IN1 THEN
BEGIN
IF E? THEN
IF C2>DC2 THEN EAST2 ELSE
IF N? THEN NORTH2 ELSE
IF S? THEN SOUTH2 ELSE WEST2 ELSE
IF N? THEN
IF R2>DR2 THEN NORTH2 ELSE
IF S? THEN SOUTH2 ELSE WEST2 ELSE
IF DC>C2 THEN WEST2 ELSE SOUTH2;
RETURN(TRUE);
END ELSE
α SINGLE CROSSER END2 WITHIN;
IF IN2 THEN
BEGIN
IF E? THEN
IF C1>DC2 THEN EAST1 ELSE
IF N? THEN NORTH1 ELSE
IF S? THEN SOUTH1 ELSE WEST1 ELSE
IF N? THEN
IF R1>DR2 THEN NORTH1 ELSE
IF S? THEN SOUTH1 ELSE WEST1 ELSE
IF DC>C1 THEN WEST1 ELSE SOUTH1;
RETURN(TRUE);
END ELSE
α DOUBLE CROSSER;
IF E? THEN
BEGIN
EAST1;
IF N? THEN NORTH2 ELSE
IF S? THEN SOUTH2 ELSE WEST2;
END ELSE
IF N? THEN
BEGIN
NORTH1;
IF S? THEN SOUTH2 ELSE WEST2;
END ELSE
IF W? THEN
BEGIN
WEST1;
SOUTH2;
END ELSE GO NOSHOW;
RETURN(3);
NOSHOW: RETURN(FALSE);
END "DDCLIP";
INTERNAL PROCEDURE AI (SHORT REAL X,Y);
BEGIN "AI"
BEAMX ← X;
BEAMY ← Y;
END "AI";
INTERNAL PROCEDURE AV (SHORT REAL X,Y);
BEGIN "AV"
R1 ← KROW - KY*BEAMY;
C1 ← KCOL + KX*BEAMX;
BEAMX←X; BEAMY←Y;
R2 ← KROW - KY*Y;
C2 ← KCOL + KX*X;
IF CLIP THEN
START_CODE
HRLZ 0, R1;
HRR 0, R2;
ROT 0, 9;
HRLZ 1, C1;
HRR 1, C2;
IOR 1, 0;
AOS 2, VCNT;
ADD 2, JOBBUF;
MOVEM 1, -1(2);
END;
IF (ACNT*6+VCNT)≥992 THEN SHOWDD(LEVCHN);
END "AV";
INTERNAL PROCEDURE DOT (SHORT REAL X,Y);
BEGIN "DOT"
SHORT INTEGER RR,CC,BIPTR,BIT0;
RR ← KROW - KY*Y;
CC ← KCOL + KX*X;
α AVOID OVERFLOW;
IF RR = ((DR MAX RR) MIN DR2) ∧ CC = ((DC MAX CC) MIN DC2) THEN
START_CODE
HRLZ 0, RR;
HRR 0, RR;
ROT 0, 9;
HRLZ 1, CC;
HRR 1, CC;
IOR 1, 0;
AOS 2, VCNT;
ADD 2, JOBBUF;
MOVEM 1, -1(2);
END;
IF (ACNT*6+VCNT)≥992 THEN SHOWDD(LEVCHN);
END "DOT";
α ARC displays an arc of radius R centered about the most recent AI(X,Y);
α L is the arc's directed length from a starting point A radians from
the positive X axis, L & A are in radians and CCW is positive;
INTERNAL PROCEDURE ARC (REAL R,L,A);
BEGIN "ARC"
REAL X,Y,S,C,XX;
INTEGER I,N,CNT;
R ← ABS(R);
IF SQRT((BEAMX-LX)↑2 + (BEAMY-LY)↑2) > (R + SQRT(LDX↑2+LDY↑2)) THEN RETURN;
X ← R*COS(A);
Y ← R*SIN(A);
N ← ABS(R*L*KX);
α IF N≤5 THEN RETURN;
L ← L/N;
CNT←ACNT← ACNT+1;
START_CODE
MOVN 1, CNT;
IMULI 1, 6;
ADD 1, JOBBUF;
SUBI 1, 1;
MOVE X; MOVEM 1001(1);
MOVE Y; MOVEM 1002(1);
MOVE L; MOVEM 1003(1);
MOVE N; MOVEM 1004(1);
MOVE BEAMX; MOVEM 1005(1);
MOVE BEAMY; MOVEM 1006(1);
END;
IF (ACNT*6+VCNT)≥992 THEN SHOWDD(LEVCHN);
END "ARC";
α RADIAL displays the line segment which radiates from the pseudo
beam position in the direction B, and lies between the ranges
R1 and R2, the pseudo beam remains fixed unless R1=R2;
INTERNAL PROCEDURE RADIAL (REAL R1,R2,B);
BEGIN "RADIAL"
REAL BX,BY,X1,Y1,X2,Y2,C,S;
C ← COS(B);
S ← SIN(B);
R1 ← ABS(R1);
R2 ← ABS(R2);
BX←BEAMX;BY←BEAMY;
AI(R1*C+BX,R1*S+BY);
IF R1=R2 THEN RETURN;
AV(R2*C+BX,R2*S+BY);
BEAMX←BX;BEAMY←BY;
END "RADIAL";
α DMS converts from degrees, minutes and seconds to radians;
α The argument is in decimal positions DDDMMSS ← ((d*100+m)*100+s;
INTERNAL REAL PROCEDURE DMS (INTEGER X);
BEGIN "DMS"
INTEGER D,M,S,Y;
REAL Z;
Y ← ABS(X);
S ← Y MOD 100;
Y ← Y DIV 100;
M ← Y MOD 100;
D ← Y DIV 100;
Z ← D*1745.32925@-5 + M*2908.8821@-7 + S*4848.1368@-9;
IF X<0 THEN Z←-Z;
RETURN(Z);
END "DMS";
α CHANNEL MAP;
PRELOAD_WITH 0,'36,'35,'34,'33,'32,'37,'30;
INTEGER ARRAY DDCHAN[0:16];
INTERNAL PROCEDURE DDSTRC (INTEGER ROW,COL,CHN; STRING STR);
BEGIN "DDSTRC"
INTEGER SIZ,I;
SIZ ← LENGTH(STR);
IF SIZ=0 THEN RETURN;
SIZ ← (IF SIZ MOD 5 THEN 1 ELSE 0) + SIZ%5;
BEGIN "DDBLK"
INTEGER ARRAY DDBUF[-1:SIZ+2+10];
INTEGER FNLINE,COLCHN;
α ASSEMBLE THE FUNCTION AND LINE SELECT WORD;
FNLINE ← '1454;
DPB('66, POINT(6,FNLINE, 7));
DPB(ROW%16, POINT(5,FNLINE,15));
DPB(ROW, POINT(4,FNLINE,23));
DDBUF[-1]← FNLINE;
α ASSEMBLE THE COLUMN AND CHANNEL SELECT WORD;
COLCHN ← '3324;
DPB(1, POINT(8,COLCHN, 7));
DPB((COL%6), POINT(8,COLCHN,15));
DPB(DDCHAN[CHN], POINT(8,COLCHN,23));
DDBUF[0]← COLCHN;
α PACK THE STRING INTO TEXT COMMAND WORDS;
FOR I←1 STEP 1 UNTIL SIZ-1 DO
BEGIN "PACK"
DDBUF[I]← CVASC(STR) LOR 1;
STR ← STR[6 TO ∞];
END "PACK";
DDBUF[SIZ]← CVASC(STR) LOR 1;
DDBUF[SIZ+1]← '000004010034;
DDBUF[SIZ+2]← 0;
α DISPLAY DD BUFFER;
START_CODE
INTEGER T1,T2;
MOVE 11,SIZ;
ADDI 11,4;
MOVEM 11,T2;
MOVE 11,DDBUF;
HRRZM 11,T1;
'715000000000 3,T1;
HRRZ 11,@DDBUF;
TRC 11,'010000;
HRRM 11,@DDBUF;
'715000000000 3,T1;
END;
END "DDBLK";
END "DDSTRC";
α DISPLAY A STRING ON CHANNEL 36 AT CURRENT BEAM POSITION;
INTERNAL PROCEDURE DDSTR (REAL BEAMX,BEAMY;INTEGER CHN;STRING STR);
BEGIN "DDSTR"
INTEGER ROW,COL;
ROW ← KROW - KY*BEAMY;
COL ← KCOL + KX*BEAMX;
DDSTRC(ROW,COL,CHN,STR);
END "DDSTR";
INTERNAL PROCEDURE DDTYPE (INTEGER Y,G,L);
START_CODE "DDTYPE"
LABEL Q1,Q2;
DEFINE PPIOT="'702000000000";
MOVE Y;HRRM Q1;
Q1: PPIOT 2, ;
MOVE G;
ANDI 7;
LSH 9;
IOR L;
HRRM Q2;
Q2: PPIOT 3,;
END "DDTYPE";
PROCEDURE DDLOAD;
BEGIN "DDLOAD"
STRING STR; INTEGER LINE;
LINE ← PTYGET;
PTOSTR(LINE,"L"&↓);
STR←PTYSTR(LINE,"L");
STR←PTYSTR(LINE,"#");
PTOSTR(LINE,"DD/BGB"&↓);
STR←PTYSTR(LINE,"B");
STR←PTYSTR(LINE,"B");
STR←PTYSTR(LINE,".");
PTOSTR(LINE,"RU DDJOB"&↓);
STR←PTYSTR(LINE,"B");
CALL(0,"SLEEP");
CALL(0,"SLEEP");
STR←PTYSTR(LINE,"*");
OUTSTR(↓&9&"Running DDJOB thru PTY."&↓);
END "DDLOAD";
α MAIL ARGUMENTS;
INTEGER DDJOB,LTRPTR;
DEFINE MAIL="'710000000000";
PROCEDURE DDCALL;
START_CODE "DDCALL"
LABEL L1,L2;
α SKIPE 1,MYJOB;
α JRST L1;
α MAIL INITIALIZATION;
'047040000030; α PJOB 1, UUO;
MOVEM 1,MYJOB;
MOVE ['444452574200]; α [SIXBIT/DDJOB/];
MOVEM DDJOB;
'047000400043; α NAMEIN UUO;
PUSHJ '17,DDLOAD;
MOVE LETTER; α LETTER POINTER;
MOVEM LTRPTR;
HRRM L2;
α SEND A LETTER;
L1: MOVE 1, LETTER;
MOVE LX; MOVEM 16(1);
MOVE LY; MOVEM 17(1);
MOVE LDX; MOVEM 18(1);
MOVE LDY; MOVEM 19(1);
MAIL DDJOB;
JRST 4,;
α WAIT FOR THE RESULTS LETTER;
L2: MAIL 1,;
END "DDCALL";
INTERNAL PROCEDURE DPYDD(STRING File;INTEGER ARRAY Swindo,Owindo,Levels);
BEGIN "DPYDD"
INTEGER I;
COMMAND←1;
α PACK UP LEVELS WORD;
LEVWRD←0;
FOR I←1 STEP 1 UNTIL 6 DO
LEVWRD ← ((LEVWRD ROT 6) LOR (LEVELS[I] LAND '77));
α PUT SWINDO AND OWINDO IN THE LETTER;
SX ← SWINDO[1];
SY ← SWINDO[2];
SDX← SWINDO[3];
SDY← SWINDO[3];
OX ← OWINDO[1];
OY ← OWINDO[2];
MAGPOW← OWINDO[3];
WNCLIP;
α PARSE AND PACK THE FILE STRING;
IF LENGTH(FILE)=0 THEN FILENAME←0 ELSE
FILENAME←CVSIX(FILE);
IF (LEVWRD =0) THEN ELSE DDCALL;
FRAME#←0;
END "DPYDD";
INTERNAL PROCEDURE SHOWDD (INTEGER XXX);
BEGIN "SHOWDD"
COMMAND←2;
LEVCHN ← XXX;
IF (ACNT+VCNT)=0 THEN RETURN;
START_CODE MOVE JOBBUF; MOVEM JADDR;END;
DDCALL;
FRAME#←0;
ARCPTR←VCNT←ACNT←0;
LEVWRD←0;
END "SHOWDD";
INTERNAL PROCEDURE DRUMDD (INTEGER FRAME);
BEGIN "DRUMDD"
COMMAND←3;
FRAME#←FRAME;
IF FRAME≥0 THEN DDCALL;
END "DRUMDD";
INTERNAL PROCEDURE TVSEG (STRING FILE,SEG);
BEGIN "TVSEG"
COMMAND←4;
FILENAME←(IF LENGTH(FILE)=0 THEN 0 ELSE CVSIX(FILE));
SEGNAME ←(IF LENGTH(SEG )=0 THEN 0 ELSE CVSIX(SEG ));
IF FILENAME ∨ SEGNAME THEN DDCALL;
END "TVSEG";
END "DDCALL";